{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ab0e01f9",
   "metadata": {},
   "source": [
    "## 1. 注意力可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e6544dfd",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt\n",
    "from torch import nn\n",
    "from matplotlib import ticker\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "# 绘制注意力热图\n",
    "def show_attention(axis, attention):\n",
    "    fig = plt.figure(figsize=(10,10))\n",
    "    ax=fig.add_subplot(111)\n",
    "    cax=ax.matshow(attention, cmap='bone')\n",
    "    if axis is not None:\n",
    "        ax.set_xticklabels(axis[0])\n",
    "        ax.set_yticklabels(axis[1])\n",
    "    ax.xaxis.set_major_locator(ticker.MultipleLocator(1))\n",
    "    ax.yaxis.set_major_locator(ticker.MultipleLocator(1))\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c4f70500",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 9.8757e-01, -3.3269e-02, -6.4129e-03,  7.4444e-02, -9.9374e-03,\n",
       "          8.6501e-02, -2.7283e-02,  7.9554e-02],\n",
       "        [-1.4526e-01,  9.9452e-01, -1.0946e-01, -3.0252e-03, -8.7525e-02,\n",
       "          6.3469e-02, -1.7428e-01,  9.7691e-02],\n",
       "        [ 6.5311e-02, -1.3188e-01,  9.8884e-01,  1.0128e-01,  4.4508e-02,\n",
       "         -5.3302e-02,  4.3820e-02, -4.7360e-02],\n",
       "        [-1.2468e-01, -1.1606e-02,  2.9003e-02,  8.5149e-01,  1.4835e-01,\n",
       "         -5.7268e-02, -5.0346e-02,  4.6933e-03],\n",
       "        [-5.2518e-02,  3.6001e-02, -1.3409e-01,  8.4001e-02,  1.0626e+00,\n",
       "          9.7431e-02, -4.4424e-02, -7.1158e-04],\n",
       "        [ 2.8226e-02,  2.6271e-01,  4.2067e-02, -4.2097e-02,  1.5363e-01,\n",
       "          1.1313e+00,  5.2735e-02, -1.6341e-01],\n",
       "        [ 1.0850e-01, -4.2463e-02, -2.5154e-02,  1.2933e-01, -5.9269e-02,\n",
       "          8.8615e-02,  1.0243e+00,  1.9031e-01],\n",
       "        [ 1.4697e-01,  6.3187e-02,  6.1696e-02, -8.7981e-02, -1.0067e-01,\n",
       "         -8.5357e-02, -3.2430e-02,  9.8060e-01]])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成一个样例\n",
    "sentence = ' I love deep learning more than machine learning'\n",
    "tokens = sentence.split(' ')\n",
    "\n",
    "attention_weights = torch.eye(8).reshape((8, 8)) + torch.randn((8, 8)) * 0.1  # 生成注意力权重矩阵\n",
    "attention_weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "34f686f2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_attention([tokens, tokens], attention_weights)  # 展示自注意力热图"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d0f35e5",
   "metadata": {},
   "source": [
    "## 2. 注意力池化"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f32bf0d7",
   "metadata": {},
   "source": [
    "### 2.1 数据集生成"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "64090e9f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([0.0932, 0.1369, 0.1464, 0.2588, 0.3617, 0.4888, 0.5750, 0.6377, 0.7767,\n",
       "         0.9431, 1.2405, 1.3345, 1.3410, 1.3594, 1.4411, 1.5876, 1.7200, 1.8047,\n",
       "         1.8210, 1.9156, 1.9657, 2.1769, 2.3423, 2.5221, 2.5958, 2.6168, 2.7542,\n",
       "         3.2111, 3.2732, 3.4693, 3.6167, 3.6792, 3.6793, 3.6878, 3.8277, 3.8367,\n",
       "         3.8376, 3.8876, 4.0447, 4.1571, 4.2137, 4.2324, 4.3410, 4.4588, 4.4594,\n",
       "         4.9091, 4.9196, 5.0685, 5.2224, 5.3402, 5.3748, 5.3791, 5.4064, 5.4869,\n",
       "         5.5518, 5.5796, 5.6379, 5.6441, 5.6606, 5.6656, 5.7890, 6.0018, 6.0525,\n",
       "         6.1598, 6.2909, 6.3964, 6.4418, 6.6232, 6.6364, 6.7585, 7.3156, 7.4028,\n",
       "         7.4515, 7.4991, 7.7147, 7.8343, 7.8439, 7.8470, 7.8872, 7.9275, 7.9587,\n",
       "         8.0238, 8.2713, 8.3269, 8.3630, 8.6349, 8.6708, 8.7167, 8.7238, 8.8672,\n",
       "         8.9560, 9.0643, 9.3687, 9.3806, 9.4898, 9.4994, 9.5740, 9.6834, 9.7924,\n",
       "         9.8807]),\n",
       " tensor([ 1.8580,  0.4672, -0.6435,  1.1041, -1.2039,  0.8677,  2.2432,  1.7170,\n",
       "         -0.3424,  1.6842,  0.8811,  2.5315,  0.5781,  2.8359,  2.9742,  2.5276,\n",
       "          1.7305,  1.4146,  3.4234,  2.2744,  3.0479, -0.1695,  2.6256,  1.7427,\n",
       "          3.6126,  2.0963,  2.3521,  2.7559,  2.4551,  5.6545,  3.3721,  4.3246,\n",
       "          3.0190,  3.6240,  4.8242,  4.9076,  4.7384,  4.3644,  4.1528,  3.0237,\n",
       "          1.3883,  3.9233,  2.7181,  3.4516,  3.0049,  2.6798,  3.2244,  4.3508,\n",
       "          4.3351,  4.3058,  3.9870,  4.7560,  2.2353,  4.8209,  3.5682,  4.3192,\n",
       "          5.2604,  5.5443,  4.8445,  6.4016,  4.3775,  6.1800,  4.2178,  7.9355,\n",
       "          6.1463,  7.0191,  6.2096,  5.5149,  5.8452,  6.4167,  7.8151,  7.2597,\n",
       "          6.2593,  8.3543,  9.0927,  8.3996,  7.7290,  9.0931,  9.0253,  9.5433,\n",
       "          9.9514,  9.3971,  8.5425,  9.0645,  8.5238, 10.8705,  9.0520,  9.2222,\n",
       "          8.5337,  9.9958,  7.9788,  9.3992, 10.2405,  9.6156,  7.5025,  9.4641,\n",
       "          9.2835,  8.3229,  8.6281,  8.5180]))"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 定义一个映射函数\n",
    "def func(x):\n",
    "    return x + torch.sin(x)  # 映射函数 y = x + sin(x)\n",
    "\n",
    "n = 100  # 样本个数100\n",
    "x, _ = torch.sort(torch.rand(n) * 10)   # 生成0-10的随机样本并排序\n",
    "y = func(x) + torch.normal(0.0, 1, (n,))  # 生成训练样本对应的y值， 增加均值为0，标准差为1的扰动\n",
    "x, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "071a174e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8+yak3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAmOElEQVR4nO3deXjU1dn/8fedDcIWwCCyCipgKYtI1CpWW6lWK65PpYq4VFvaX6202ta6VFyqT9dLq63VItJqXdo8FCu11qVqta2KBtQAooKIEAQStoQlIcuc3x+TSDLMJLN8Z/nOfF7X5UXyzSxngtxz5j73uY855xAREf/JS/cAREQkPgrgIiI+pQAuIuJTCuAiIj6lAC4i4lMFqXyy0tJSN2LEiFQ+pYiI7y1ZsmSLc25A6PWUBvARI0ZQUVGRyqcUEfE9M/so3HWlUEREfEoBXETEpxTARUR8SgFcRMSnFMBFRHxKAVxE/K+yHO4cBzf3Df5ZWZ7uEaVESssIRUQ8V1kOf5sNTfXB72vXB78HmDA9feNKAc3ARcTfnr91X/Bu01QfvJ7lFMBFxN9qq2K7nkUUwEXE30qGxnY9iyiAi4i/TZ0DhcUdrxUWB69nOQVwEfG3CdPhjLuhZBhgwT/PuDvrFzBBVSgikg0mTM+JgB1KM3AREZ9SABcR8SkFcBERn1IAFxGJJMO36GsRU0QkHB9s0dcMXEQkHB9s0e8ygJvZfDOrNrPl7a71N7PnzGxV65/9kjtMEZEU88EW/Whm4H8ATg25di3wvHNuFPB86/ciIl1LdV453ufzwRb9LgO4c+5lYFvI5bOAB1u/fhA429thiUhWassr164H3L68crKCeCLP54Mt+vHmwAc65za2fr0JGBjphmY2y8wqzKyipqYmzqcTkayQ6rxyIs/ngy36CVehOOecmblOfj4XmAtQVlYW8XYikgNSnVdO9PkyfIt+vDPwzWY2CKD1z2rvhiQiWSvVeWUf5LETEW8AXwRc0vr1JcAT3gxHRLJaqvPKPshjJyKaMsLHgFeBMWZWZWaXAz8FTjazVcAXWr8XEelcqvPKiT5fhu/ENOdSl5YuKytzFRUVKXs+EckwleXBBcTaqmAaY+qczM0xh+7EhODsPQ0LmWa2xDlXFnpdOzFFJDVSXUKYqEgVLI9/M2Nm5ArgIpIakQLiwq+nJxh2lR6JVKniWsiUNyAFcBFJjc5K91IdDKP5NBBNpUonNeXOOeobW6jZuZePtu6msTngzdjbUTdCEUmNkqGtATOCtmDoQX7ZOUddfTMb6+rZsrORrbv3smVXI3X1TdQ1NDG78kf0C/NpYPNfr+eSFw7COThx73lczT10Z2/nz1W7nltuv4ln8k6gqcXR2NxCY0uAvc0B2i8xvvC9EzlkQK+EX1t7CuAikhpT5+y/KBgqxg09e5tbWLV5Fys31vFBzW5K1/yVM7bMY0BgCzvdAfy2eTqLAsd3uE/vbgXcaOG3rhwY2MLw/j3IM2O9TeOxncWcuXUe/ZurCWDks/8s2oDrm+9l9JDeLOv/RboV5FFUkEe3gjx6FBXQq1s+PYoKOKBXt5heWzRUhSIiqfNJFUqEmXjJMLhqefifAVXb91CxdjtvrN3G0nU7WLV5J82BYAw7p+C//KRgXocZc3N+d9Ye9xNswnQO6FlE7+6F5OdZMOcdbgydPX+4qpQYxp6ISFUomoGLiLdCSwVHnQKrnu1YOgjhS/RCNtjsaWzmldVbeen9Gl56v4Z12/YA0KtbAZOG9+VzYw7h04P7MHZQH0Y+fA1W2zHdUdDSwGGVd8DUyzqOMdynga42+LSldhZ+PfzP09BmVgFcRLwT7hSbigf2/bx2fTAAFveHiTP2D+wTprN7bzPPv1vNP5ZtpMf7C7mKP3GSbWVbwQBWlH2XAcddxJiDegdn0u3F0vekLRjHWpM+YXrkTxBp2J6vAC4i3glXKhhO/TZ4+9FPNsU451j84TYW/N/bPLVsI3saW7iox2JuzL+fIhecVZe2VHPiez+G0QNgcEigrSwnmI0OkxKOFFjjbVQVz+w9SRTARcQ7saQRmuoJ/PMW/rjraB58ZS1rtuymV7cCzpw4mHOPHMpRf/3hfimRiJUqz99K2OCNeR9Y4529J4ECuIh4p6tSwVC1G7hp0QqOGNaXO6ZP5LRxgyguym/9WQwpkYhvHC45gTVD2swqgIuId6IpFWxnR+GB/PVrUzhiWN/9fxjpzSBcSiTibYdFNQ6/0k5MEfFOuO5/ZZcT6NZvvwRHoKCY/mfeFj54Q2ytYLO8bWwkmoGLiLfapRfqG1v43csfMLf+FE4JvMxNxQvo21SNlQwlr6u8cSy55gzKS6eSNvKIiOecczy1bBO3//0dPq5t4EvjD+L7p4zxfCt5RkpCy1xt5BGRlPhwy25ueHwZr3ywlU8N6sOvzp/E0SP7x/Yg8QbBdPcbD1cH/7fZwa+TMA7NwEXEE00tAe7/9xru+ucqigryuOaLY5hxzMH7b7jpStgt66013iXDIgflTDiAIdIWfeh87F3QDFxEkubdTXVc/ee3eWdjHaeNO4hbzvw0B/bpHt+Dhd0M1DrR7GxGG6nfuEcdDqMSTctc8Gw8qkIRkfhUluPuHIe7uS+9753EpB3Pct/Mydw7c3LH4B3ruZJdbQaK1IM7lrrxZOlqO30n/cPjoQAuIrGrLCewaDZWux7DMcS2cFv+/ZwaeHm/28V8jFo0PUXCBeVI90tFj5K2N6na9QTTPZ3w8A1FAVxEYlb/9E3kNXdMV1hzmNllZ2mNSMLVdIcKF5TTVQve4U0KgumeToK4h28oCuAiErXG5gA/fvIduu3+OPwNQmeX8aQ1OmwGgv2CYaSgHG4TUSoWMCPl7Iv7J/0NRYuYIhKV6roGvvXIUio+2s6VvQfSt2nz/jcKnV3Gsh2+vfa9RmIpDUxHj5JIb0b12+HcuUkta1QAF5EuVazdxv97ZCm7Gpr59QWT6Gu3RddS1YvWqxnSOCqizt6kkjz2hFIoZnaVma0ws+Vm9piZxVk3JCKZ6rHX13H+3NfoWZTPX6+YwhkTB0efrkhXWiOV0tiHJe6NPGY2BPgPMNY5V29m5cBTzrk/RLqPNvKIRCHduwlbNbcEuP2plfz+v2s5cfQA7r5gEiXFhSkfh2eS+XtN8t9ZsjbyFADFZtYE9AAirGyISFRSvBU7krqGJq589E1eer+Gy6aM5PovHU5Bvo9rHpL9e01TmifuvxHn3Abgl8A6YCNQ65x7NvR2ZjbLzCrMrKKmpib+kYrkgnjK7jy2sbae6fe9yn9Xb+F/zxnPnIOXU3D3hOg34mSiDPi9JkPcAdzM+gFnASOBwUBPM5sZejvn3FznXJlzrmzAgAHxj1QkF6R5N+G7m+o4555XqNpez++/ehQzil+LfSNOJsqEXZpJkMhnoi8AHzrnapxzTcBC4DhvhiWSo9K4m/CVD7Zw3r2v4nCUf+NYPjtqgDcz11i30idDOndpJlEiAXwd8Bkz62FmBkwFVnozLJEclaaKhn8s28il899gUN/uPP6tKYwd3Cf4g0RnrvFspU+GLD2xJ5Ec+GJgAbAUWNb6WHM9GpdIbkpD2d2ji9fxrUeXMn5oCeXfOJbBfdsFukRnrpmSe87Sckb1AxfJYfe8uJpfPPMenx8zgN9eOHnfifBtEu2xfXNf2O80TACDm3fEP/B0SVOJp/qBi8gnnHP84pn3+O2/PuCsIwbzy/MmUhiuTDDRsybj3UqfiTKkxLM9BXCRHBMIOG598h3+8MpaLjh6OLedPa7zU3MSqXH2Yit9psiEAyNCKICL5JBAwHH948v40xvr+drxI7nh9E8RrEFIkmw6LT4DSxEVwEVyREvA8YMFb7Nw6QauPOkwrj55dOzBO54ccKY3o4pWBqaDfLw3VkSi1dwS4Oryt1i4dANXnzya750yJr7gnQklgemSgaWICuAiWa65JcB3//wWT7z1MdecOobZU0fF90CZUhKYLhlYiqgUikgWa24JcFX52zxZuZHrTjucb5x4aPwPloE54JTLsHSQZuAifhPl1vSWgON7//c2f3v7Y65NNHhD1m5H9zMFcBE/iTIP3bZg+cRbH/ODL47hm4kGb8jIHHCuUwAX8ZMo8tCBgOP6hctYuHQD3zt5NFd8/jBvnjsDc8C5TjlwET/pIg/tnOOmRSv4c8V6rjzpMK6Md8EykgzLAec6zcBF/KSTPLRzjtv/vpI/vvYR3zjhEK4+eXRqxyYppwAu4ied5KHveO595v3nQy49bgTXnnZ4cndYSkZQABfxkwh56N9uO5Jfv7Ca848axk1njFXwzhHKgYv4TUge+sFX1vLzp1dw1hGDuf2c8QreOUQzcBEfK69Yz02LVnDK2IH88ryJnXcVlKyjAC7iU3+v3Mi1f6nks6NK+fWMSeH7eUtW09+4SDIk+SDfF9+t5jt/epPJB/fjdxdNpltBfvgbZsKBwpI0yoGLeC3JJ7e8tmYr33x4CYcP6s0Dlx5Fj6II/4wz8AQZ8ZZm4CJeS2LXvsqqHXztwQqG9e/BQ5cdQ5/uhWkZh2QGBXARryWpa9+qzTu5ZP7r9O1RyMOXH0P/nkVpGYfSMplDAVzEa7F27YsiIK7buoeZDyymID+PR752DAd9tKjrIJqM7oG5fqhDhlEAF/FaLF37ogiItYsfoeg3E3i18cu80m02B796Y3RBNBndA5WWySgK4CJei6VrXxcBcdcbj9LtH1dxkKshD0fhrg1QMT+6IJqM7oE61CGjJFSFYmZ9gXnAOMABlznnXvVgXCL+Fm3Xvk4C4s6GJur/MYcD2RvyQxf9Y3ndPTADD/bNZYnOwO8CnnbOHQ5MBFYmPiSRHBIh8AX6DOHyBysobalJ+LE8pUMdMkrcAdzMSoATgAcAnHONzrkdHo1LJDeECYiusJjfFczkjbXbaOgxOMIdQ7bMpyqI6lCHjJJICmUkUAP83swmAkuA7zjndre/kZnNAmYBDB8+PIGnE8lCbYHv+VuhtgpXMpQ/dL+Yn330aX567nh6dL+l42YcCAbriTNg1bPBtEnJ0GDwnjA9uJDZ+lgdrns9ZgXsjGDORcindXVHszLgNWCKc26xmd0F1Dnnbox0n7KyMldRURHfSEWyXCDguOYvlSxYUsWPTv8UX/vsIcEfRBuUQ3deQjDYa4bse2a2xDlXFno9kRl4FVDlnFvc+v0C4NoEHk8kZznnuPlvK1iwpIrvfmHUvuAN0c94O6toUQDPSnHnwJ1zm4D1Zjam9dJU4B1PRiX+pB16cXHO8bOn3+OhVz9i1gmH8J14z7FUiV/OSbSZ1ZXAI2ZWBKwBvpr4kMSX1Dipoxhy0b9+YTX3vfQBFx4znOsSOQpNJX45J6EyQufcW865MufcBOfc2c657V4NTHxGO/T2iWG7+dyXP+CO597n3COH8OOzxiV2ms7UOZAf0h8lv0glfllMOzHFG/r4vk+Ub2YPvrKW/33qXaZNGMTP/2cCeV6cphNalBBnkYL4gwK4eCMZjZP8Koo3s8deX/fJUWh3fuUICrw4Tef5WyHQ1PFaoCk3PwXlCAVw8YZ26O3TxZtZ+RvruW7hMj4/ZoC3R6HpU1DOUQAXb2iH3j6jTiHSTskFS6r44cJKThg9gHtndnIUWjz0KSjn6Eg18Y526AUXKt9+lI4NpwwmzuDxluP4wYK3mXJoKXMvmkz3Qg+DNwQ/7YTbyJOLn4JyhGbgIl4Kt4CJY/eKp7i6/G2OPeQA7r+4zPvgDfoUlIM0AxfxUoR8c/GeTUw5tJT7Ly6juCgJwbuNPgXlFM3ARbwUId+8rWAA8y5JcvCWnKMALuKlMNU4e60bfab9ODlpE8lpCuCSHtnaN6U1D72z2yACzthacCB5Z91N0aTz0z0yyULKgUvqVZbDE1dAS2Pw+9r1we/Bn/nbdn1PXMlQnjrw6zyz8xxu7vEX+jdXYy/eBnl5/nxtktHi7gceD/UDFwB+NhLqt+1/vbg//PDD1I8nVu0bVRX3g8Zd+96MgL0un/y8PApcu12R6sstCYjUD1wpFEm9cMG7s+uZJLRRVf22DsEboJu1dAzekLuNvSSpFMBFYhG2zjtK2tIuHlMAl9SzCP/bRbqeSRIJwtrSLh7zwb8YyTouENv1TBJNEM4r3L8vt7a0SxIogEvqlQyL7XomCVPnHbDC4AJs2/b1s38LZ92jLe2SdCojlNTzc9OlCdN5fe02hiz5BYNsK4Hegyk4+ebwwVkBW5JMAVySL9z5kGfc3XptPVh+xyqNdAa+cGMFeP5WXG0VdUUDeXjXudSMeIT7Zk6mpEdh1/efMD2mMzJFoqU6cEmu0MOOYV9NNET+WTqCW7ix5hWCWYdSwbZ/MVYyrGMgjvRaJ84ItpjNlNcpvhOpDlwBXJLrznERTkpvzXdH+tlVy5M7rnAijbUz7QNxpPtbPriW/a+3f52aoUsntJFH0qOzY74i/mx9enqkxFMi2D71E+n+4YJ3+9vHcIq9SHsK4JJcnR3z1WlJXhoCWbx12m2BONL9LUIXwrbbR3mKvUgoBXBJrs4OOw73s1CpDGRhxtNMAS60pjtUWyCO9FonX9r5gc86jFjilHAAN7N8M3vTzJ70YkCSZTo75iv0Z5GkKJC58efxytib2OBKCWDU9xhMwbn3Yp/UdBNmnNZ6iDGRX+u0Ozo/6kyHEUucEl7ENLOrgTKgj3NuWme31SKmdKqzBc+pc5K6yFe9s4EbHl/Oc+9s5vjDSvnleRM5qKT7/jd88mqomE+HQ4sTrSjprFJHC5lCkhYxzWwocDowL5HHEQEipyBGnZK0RT7nHAuXVnHyHS/z0vs1/Oj0T/HQZUeHD94Aq56l44nzJJ7m0WHEEqdEN/L8CrgG6B3pBmY2C5gFMHz48ASfTrJaW8AKnWl3tsiXQJBbv20Pc55Yzovv1TD54H78/MsTOHRAr87vlKx8tQ4jljjEHcDNbBpQ7ZxbYmafi3Q759xcYC4EUyjxPp/kiHCBbOGs8LeNM2jubW5h7ktr+M2Lq8nPM26cNpZLjxtBfl4nefg2JUMjpHmUr5bUS2QGPgU408y+BHQH+pjZw865md4MTaSVR0HTOcez72zmp/94lw+37OZL4w/ixmljGVTSRSVMe37u4yJZJ+4cuHPuOufcUOfcCOB84AUF7wyUCYcHJzqGzkoRo/TW+h185Xev8Y0/LiHP4KHLjua3F06OLXiD8tWSUdTMKpuFVje0Lf5B6gKOF2OIlBuP4v7LN9Tyq3+u4p8rN1Paq4jbzxnHV8qGUZCfwPp9pHy1tsNLiqkXSjbrrCwvVb1G0jAG5xxL123n3n+t4Z8rN9OnewGXH38Il392JL26JWnOolJASaJIZYSagadbMmdtmbDDLxVjaP0dutoq6osHcW/Bhfy6ZhIlxYVcffJoLp0ygj7dC7t+nEQkqVJGpDMK4OmU7BRHuismKsuD51yG7cTn0Rgqywksmk1ecz0G9Kj/mCu4m6OOuonJ075Bz2TNuENlwpul5Bz1QkmnZDcx8mDxL25tb07hgrcHY6jZuZeHXl1LzV9vIK+54++wO3s5Yd29qQveoO3wkhaagadTsmdtCSz+JSzcmxMEO/PFkRd2zrGqehcvvFvNCyurqfhoGwEHM7vXhL9DNL9DL9NXKi+UNFAAT6dUpDjStcMvYm/sQFTjaQk41tTsouKj7by2ZiuvrdnK5rq9AIwd1Idvf/4wTp8wmLzH4vwdep2+SuebpeQsBfB0yuZZW5RvTs45tu1uZM2W3azavIv3N+/knY11rNhQy+7GYPplQO9uHDOyP8cdWsrnDx/QsXY73t9hMhYdtR1eUkwBPJ3CzdpGnRL8fuEsX8zinHMEXHDG3NQSoKklQGNzADv6hxzw4g865Keb87rz9ICv8+8FlVTvbODjHQ2s376HPY378uTFhfmMOag3X548lPFD+zJpeF8OKe2JWYRt7vHOfLXoKFlAATzd2s/aPPhYHwg4qnfuZcOOPWyu28uWXXvZsnMv2/c0UVvfRF1DE7samqlvaqG+qYW9TQEaWwNvS4ujxTkCrUG5remea9d9z7l9vfjagnd4/Tkz76tcU1DOYNtCgDzyWxqYtOpuFhdspabvyQw/oAdTDitlaL9iRpT2YNSBvRnSt5i89j1JKsvh4SSkJdJdoSPiAQVwryWyMBbDx/rmlgCra3axfEMdq6p38kH1btbU7KJqez2NLYEOt80zKCkupKS4kD7FhfQsKqCkuJDuRfl0L8inqMAozM8jP8/INws2dTIwjLaJb/v5r7X+DCDvk/tAYX4eRQV5FObn0aMonx5FR1K34TAGvX4DBS3B1zWELfw4by6cOK7r30s0b2jxvullc/pKcoYCuJcSnUF38rG+tr6JJR9tY/GH26hYu50VH9fS0BQM1IX5xsjSnow5qDenfPoghvYrZki/Yg7q053SXt3o37Mouk57yfDcndASZ645mje0eHPZWnSULKAA7pXKcnj8m/vXPceyMBbhY3113gA+c+uzBFwwWE8Y2pcLjzmYcUP6MG5wCSNLeybW2yOZEsk1R3PfRB5fi47icwrgXuhs0wpEvTDmps7Bte4qbLPHFfFQj4v59mcO49hDS5k0vC/dCyOccp5s8aSHEsk1R3Nf5bIlh2XotM1nIm1aadNFMNm6ay/z/r2GLz4/kO/u+SobXCkOY3fxIJpPv4vvf/9Grj5lDMceekB6g3c8x5olshu0s/u2taitXc9+Bw1H+/iZ0GpXJAGagXuhsxl2J8GksmoH8//zIX9ftpGmFscRw/pyzFnfpMe4W7CeRfSM5rlT1cI0HbnmSPeFkAVIRzCIu30HIHuxQCqS4RTAvRDpY3yYbePOOZ5fWc19L31AxUfb6dWtgAuPOZgZxwxn9MCIR4uGl8oglK5cc7j73jkuzCceF1uLWnUPlCygAO6FUadAxXw6nFbevhd0ZTmudRZZnVfKoobz2FRyMnOmjeW8sqH0jrfVaSqDUCblmr3YhKONPJIFlANPVGU5vP0oHYI3BhNnfBK8W56YjdWux3AMDNRwR/F8/vXFGi47fmT8wRtSG4TC5aMBGnenPnfsRec/dQ+ULKAAnqiwC5gOVj3Lu5vq2PLEDeSH1EEXtDRQ8OKPE3/uVAahtrMgi/t3vF6/LbrFTC950SY3na12RTyiAJ6oCLNdV1vF6Xf/h/4tCbQ77Uq8QSje6osJ06EozNKqlz3Mox1HogcL63BiyQK5kwNPVrVGhNzwBncAFxw9DLdmCNSFCdbhZsmxjjGeCo8k7hZNKS824Wgjj/hcbszA461hjkaYWXAD3XAn3chtZ48n/ws3RTdLjneME6YHKy9u3hH8M5Ht6dFQ7jhINeSSAXIjgCfx6DI3/jz+/ak5bHClBJyxq/sgis75DcNOvDR4g2g/qif7eLU2ic6glTtO7oRAJAa5kUJJ0sf+6p0NXLOgkn+9dzDHH/YoPzl3PMP699j/htF8VE9WaiI0LVPcL7jwGCraGbSaQKmGXDJG3AHczIYBDwEDCdbQzXXO3eXVwDyVhBrmZ1ds4tqFy9i9t5lbzvw0Fx97cORDB9I0xrD57rxCyC+ClsZ9t4t1Bp3rueNMWQeQnJdICqUZ+J5zbizwGeAKMxvrzbA85uHH/sbmALf8bQWz/riEQSXd+fvs47nkuBGJBW+Px/iJcDPFQBMU9VL1RSK0DiAZIu4ZuHNuI7Cx9eudZrYSGAK849HYvOPRx/712/bw7UeX8nZVLV+dMoJrTzucbgUeNZdKRmoi0oywfjv88MP4HzfX6TAIyRCe5MDNbAQwCVgc5mezgFkAw4cPT+yJEikFTPBj/0vv1zD7sTcJOMd9M4/k1HGD4n6siLxOTWTS9vdsonUAyRDmXMRDDaN7ALNewEvA7c65hZ3dtqyszFVUVMT3RKH5XOjYbyRJnHPc+9IH/OKZ9xgzsDe/u2gyBx8QVZ/A9EvT70xEvGVmS5xzZaHXEyojNLNC4C/AI10F74R5VWYXQ/3unsZmrnh0KT9/+j2mTRjMwm8d503wTkUNcdunlab6YFdEUL5bJMskUoViwAPASufcHd4NKQIvVv6j3YVYWU7zc7fQfecGrncH8D9HfpeTzvtS4guVsYzBy+dwLftytAreIlkjkRn4FOAi4CQze6v1vy95NK79ebHyH80svrKcwBOzKdhZRR6OobaFqatux5b9X+xjjncMfngOEUm7uAO4c+4/zjlzzk1wzh3R+t9TXg6uAy/K7KKYxdc/fRN5kU5R90IqaohVpyySE/yzld6L7nFdzOIfWfwR3XZ/HP42XgW/VNQQq05ZJCf4J4BD7I2bQkWYxbupc/jlM+9xw+PL2VZwYPj7ehX8wh6MYMFcuFcLmtnYr0TNo0T2468Anqgws/jAtLu5btXh/ObF1Zx/1DD6nXFbcoNfhzHAJ4fxgndNkbKt17WaR4mElXAdeCwSqgNPgr3NLXznsbd4esUmZp90GFedPDpYaZKqk97vHBdho00Mh/PmAv2eJMdFqgPPjW6EYeze28ysP1bw39VbmTNtLJcdP3LfD1PVrEmLjdHR70kkrNxKobSqrW9i5gOLeW3NNu6YPrFj8E4lLTZGR78nkbD8H8BjXNzatruRGfe/xvINtdwz40jOPTKNQSAbFxuTQb8nkbD8nUKJcVdjdV0DF85bzLpte7j/4jI+NyZCxUmqqClSdPR7EgnL34uYMSxuba5r4IK5r7GproEHLjmKYw89wLtxiIgkUXYuYka5uLWptoEL7n+N6roGHrrsaMpG9E/B4EREksvfAbyrftetTakO3LmBR9wBNHzuRxziVfBOVamhiEgE/l7E7Gxxq7KcwKJ9TakG2xYOefU6bzZ/aGOJiGQAfwfwTnYctjx3C3nNSWpKpW5/IpIB/J1CgbCbbqrrGijduSH87b3Y/KGNJSKSAfw9Aw9jy669zJi3mI0uQpWJF5s/tLFERDJAVgXwHXsamTlvMVXb97Dnszckb/NHKjoKioh0wf8plFZ1DU1c9MDrrNmym/mXHMWoUaVwYK/kVIp02FiynrAdBdvfTkQkCfy3kSdM+d7uMedy8fzXqazawe8umsxJhw/0ZsDRUKc8EUmy7NjIE2brvFs0m9/3Ws2bmydyz4wjUxu8QQuaIpI2/grgYcr3rLmes7c/wODzXuK08YNSP6auNhOJiCSJvxYxI8xqh9jW9HUVVKc8EUkTfwXwCLNaS+dsN9uOLxMR3/BXCmXqHNzfZmPt0yiZMNtN1Qk+IiLt+GsGPmE6T424jqpAKQ7DabYrIjksoRm4mZ0K3AXkA/Occz/1ZFQRzPv3Gm5bdhjTyxbys/+ZEDyAWEQkR8U9AzezfOAe4DRgLHCBmY31amCh/vT6Om77+0pOHz+In5yr4C0ikkgK5WhgtXNujXOuEfgTcJY3w+roycqPue7xZZw4egB3fuUI8vMUvEVEEgngQ4D2BdBVrdc6MLNZZlZhZhU1NTUxP4lzjife+pijDu7PfTMnU1Tgr7S9p2I8wFlEslvSq1Ccc3OBuRDcSh/r/c2Me2Ycyd7mFoqL8j0fn2/EeICziGS/RKazG4Bh7b4f2nrNc0UFefTuXpiMh/YPHSIhIiESCeBvAKPMbKSZFQHnA4u8GVYK+SUtoZ4rIhIi7hSKc67ZzL4NPEOwjHC+c26FZyNLBT+lJdRzRURCJLQi6Jx7yjk32jl3qHPudq8GlTJ+Skuo54qIhMjhkg78lZZQzxURCeGvXihe81taQj1XRKQdf87AvVp4VFpCRHzMfzNwLxceO5xt6fG5mSIiSea/AN7ZwmM8gVdpCRHxKf+lUPy08CgikkT+C+CRFhgzdeFRRCRJ/BfAtfAoIgL4MYCrHlpEBPDjIiZo4VFEBD/OwEVEBMi2AO6XzoIiIh7wZwolHD91FhQR8UD2zMD91FlQRMQD2RPAtcFHRHJM9gRwbfARkRyTPQFcG3xEJMdkTwDXBh8RyTHZU4UC2uAjIjkle2bgIiI5RgFcRMSnFMBFRHxKAVxExKcUwEVEfMqcc6l7MrMa4KM4714KbPFwOH6Ri687F18z5Obr1muOzsHOuQGhF1MawBNhZhXOubJ0jyPVcvF15+Jrhtx83XrNiVEKRUTEpxTARUR8yk8BfG66B5Amufi6c/E1Q26+br3mBPgmBy4iIh35aQYuIiLtKICLiPiULwK4mZ1qZu+Z2Wozuzbd40k2MxtmZi+a2TtmtsLMvpPuMaWKmeWb2Ztm9mS6x5IqZtbXzBaY2btmttLMjk33mJLNzK5q/X97uZk9Zmbd0z2mZDCz+WZWbWbL213rb2bPmdmq1j/7xfv4GR/AzSwfuAc4DRgLXGBmY9M7qqRrBr7nnBsLfAa4Igdec5vvACvTPYgUuwt42jl3ODCRLH/9ZjYEmA2UOefGAfnA+ekdVdL8ATg15Nq1wPPOuVHA863fxyXjAzhwNLDaObfGOdcI/Ak4K81jSirn3Ebn3NLWr3cS/Ac9JL2jSj4zGwqcDsxL91hSxcxKgBOABwCcc43OuR1pHVRqFADFZlYA9AA+TvN4ksI59zKwLeTyWcCDrV8/CJwd7+P7IYAPAda3+76KHAhmbcxsBDAJWJzmoaTCr4BrgECax5FKI4Ea4PetqaN5ZtYz3YNKJufcBuCXwDpgI1DrnHs2vaNKqYHOuY2tX28CBsb7QH4I4DnLzHoBfwG+65yrS/d4ksnMpgHVzrkl6R5LihUARwL3OucmAbtJ4CO1H7TmfM8i+OY1GOhpZjPTO6r0cME67rhruf0QwDcAw9p9P7T1WlYzs0KCwfsR59zCdI8nBaYAZ5rZWoJpspPM7OH0DiklqoAq51zbJ6wFBAN6NvsC8KFzrsY51wQsBI5L85hSabOZDQJo/bM63gfyQwB/AxhlZiPNrIjgYseiNI8pqczMCOZEVzrn7kj3eFLBOXedc26oc24Ewb/jF5xzWT8rc85tAtab2ZjWS1OBd9I4pFRYB3zGzHq0/r8+lSxfuA2xCLik9etLgCfifaCMP9TYOddsZt8GniG4Wj3fObcizcNKtinARcAyM3ur9dr1zrmn0jckSaIrgUdaJyhrgK+meTxJ5ZxbbGYLgKUEK67eJEu31JvZY8DngFIzqwJuAn4KlJvZ5QTba8d9Eru20ouI+JQfUigiIhKGAriIiE8pgIuI+JQCuIiITymAi4j4lAK4iIhPKYCLiPjU/wd7aEzmPgBNSQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制曲线上的点\n",
    "x_curve = torch.arange(0, 10, 0.1)  \n",
    "y_curve = func(x_curve)\n",
    "plt.plot(x_curve, y_curve)\n",
    "plt.plot(x, y, 'o')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "408503a3",
   "metadata": {},
   "source": [
    "### 2.2 非参数注意力池化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "687a5381",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 平均池化\n",
    "y_hat = torch.repeat_interleave(y.mean(), n) # 将y_train中的元素进行复制，输入张量为y.mean, 重复次数为n\n",
    "plt.plot(x_curve, y_curve)\n",
    "plt.plot(x, y, 'o')\n",
    "plt.plot(x_curve, y_hat)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "95186381",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(torch.Size([100, 100]),\n",
       " tensor([[0.0000, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000],\n",
       "         [0.1000, 0.1000, 0.1000,  ..., 0.1000, 0.1000, 0.1000],\n",
       "         [0.2000, 0.2000, 0.2000,  ..., 0.2000, 0.2000, 0.2000],\n",
       "         ...,\n",
       "         [9.7000, 9.7000, 9.7000,  ..., 9.7000, 9.7000, 9.7000],\n",
       "         [9.8000, 9.8000, 9.8000,  ..., 9.8000, 9.8000, 9.8000],\n",
       "         [9.9000, 9.9000, 9.9000,  ..., 9.9000, 9.9000, 9.9000]]))"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# nadaraya-watson 核回归\n",
    "x_nw = x_curve.repeat_interleave(n).reshape((-1, n))\n",
    "x_nw.shape, x_nw"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c0962148",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(torch.Size([100, 100]),\n",
       " tensor([[8.0585e-02, 8.0181e-02, 8.0073e-02,  ..., 3.5190e-22, 1.2183e-22,\n",
       "          5.1098e-23],\n",
       "         [7.5357e-02, 7.5307e-02, 7.5277e-02,  ..., 8.5860e-22, 3.0050e-22,\n",
       "          1.2716e-22],\n",
       "         [7.0189e-02, 7.0451e-02, 7.0490e-02,  ..., 2.0866e-21, 7.3827e-22,\n",
       "          3.1517e-22],\n",
       "         ...,\n",
       "         [5.8540e-22, 8.9043e-22, 9.7487e-22,  ..., 6.4303e-02, 6.4038e-02,\n",
       "          6.3270e-02],\n",
       "         [2.3868e-22, 3.6464e-22, 3.9960e-22,  ..., 6.8407e-02, 6.8871e-02,\n",
       "          6.8649e-02],\n",
       "         [9.6921e-23, 1.4872e-22, 1.6313e-22,  ..., 7.2478e-02, 7.3769e-02,\n",
       "          7.4183e-02]]))"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 带入公式得到注意力权重矩阵\n",
    "attention_weights = nn.functional.softmax(-(x_nw - x)**2 / 2, dim=1)\n",
    "attention_weights.shape, attention_weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a89f22c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# y_hat为注意力权重和y值的乘积，是加权平均值\n",
    "y_hat = torch.matmul(attention_weights, y)\n",
    "plt.plot(x_curve, y_curve)\n",
    "plt.plot(x, y, 'o')\n",
    "plt.plot(x_curve, y_hat)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b94efb23",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_attention(None, attention_weights) # 展示注意力热图"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
